using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common; using MinCultura.Sipa.DataAccess.EntidadesArtes;
using SystemFrameworks;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_ENTIDAD_NATURALEZA_JURIDICA
	/// </summary>
	public class EntidadNaturalezaJuridica
	{
		#region Private Data Access Atributes

		private const String ENT_ID_PARAM = "@ENT_ID";		
		private const String ENT_PERSONERIA_JURIDICA_PARAM = "@ENT_PERSONERIA_JURIDICA";
		private const String ENT_OBJETO_SOCIAL_PARAM = "@ENT_OBJETO_SOCIAL";
		private const String ENT_NATURALEZA_PARAM = "@ENT_NATURALEZA";
		private const String ENT_ENTIDAD_CARACTER_PARAM = "@ENT_ENTIDAD_CARACTER";
		private const String ENT_SINO_ENTIDAD_PARAM = "@ENT_SINO_ENTIDAD";
		private const String ENT_DEPENDE_PARAM = "@ENT_DEPENDE";
		private const String ENT_NIVEL_ENTIDAD_DEPENDE_PARAM = "@ENT_NIVEL_ENTIDAD_DEPENDE";
		private const String ENT_OTRO_REGIMEN_PARAM = "@ENT_OTRO_REGIMEN";
		private const String ENT_OTRO_SUBREGIMEN_PARAM = "@ENT_OTRO_SUBREGIMEN";
		private const String ENT_SINO_ENTIDAD_DEPENDE_RED_PARAM = "@ENT_SINO_ENTIDAD_DEPENDE_RED";
		private const String ENT_NOMBRE_ENTIDAD_DEPENDE_RED_PARAM = "@ENT_NOMBRE_ENTIDAD_DEPENDE_RED";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase ARTENTIDADNATURALEZAJURIDICA
		/// </summary>
        public EntidadNaturalezaJuridica(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

		public EntidadNaturalezaJuridicaData BuscarEntidadNaturalezaJuridica()
		{
			EntidadNaturalezaJuridicaData response = new EntidadNaturalezaJuridicaData();
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_ENTIDAD_NATURALEZA_JURIDICA", response);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

		public EntidadNaturalezaJuridicaData ConsultarEntidadNaturalezaJuridica(decimal parENT_ID)
		{
			EntidadNaturalezaJuridicaData response = new EntidadNaturalezaJuridicaData();

			SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, parENT_ID);

			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_ENTIDAD_NATURALEZA_JURIDICA", response, parameters);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

		public void AdicionarEntidadNaturalezaJuridica(EntidadNaturalezaJuridicaData datos, params SqlTransaction[] transaccion)
		{
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[EntidadNaturalezaJuridicaData.ENT_ID_FIELD]);					
					SqlParameter param4 = new SqlParameter(ENT_PERSONERIA_JURIDICA_PARAM, row[EntidadNaturalezaJuridicaData.ENT_PERSONERIA_JURIDICA_FIELD]);
					SqlParameter param5 = new SqlParameter(ENT_OBJETO_SOCIAL_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OBJETO_SOCIAL_FIELD]);
					SqlParameter param6 = new SqlParameter(ENT_NATURALEZA_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NATURALEZA_FIELD]);
					SqlParameter param7 = new SqlParameter(ENT_ENTIDAD_CARACTER_PARAM, row[EntidadNaturalezaJuridicaData.ENT_ENTIDAD_CARACTER_FIELD]);
					SqlParameter param8 = new SqlParameter(ENT_SINO_ENTIDAD_PARAM, row[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD]);
					SqlParameter param9 = new SqlParameter(ENT_DEPENDE_PARAM, row[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD]);
					SqlParameter param10 = new SqlParameter(ENT_NIVEL_ENTIDAD_DEPENDE_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD]);
					SqlParameter param11 = new SqlParameter(ENT_OTRO_REGIMEN_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OTRO_REGIMEN_FIELD]);
					SqlParameter param12 = new SqlParameter(ENT_OTRO_SUBREGIMEN_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OTRO_SUBREGIMEN_FIELD]);
					SqlParameter param13 = new SqlParameter(ENT_SINO_ENTIDAD_DEPENDE_RED_PARAM, row[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param14 = new SqlParameter(ENT_NOMBRE_ENTIDAD_DEPENDE_RED_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param15 = new SqlParameter("@ENT_NIVEL_ENTIDAD_DEPENDE_RED", row[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param16 = new SqlParameter("@CAR_ID", row[EntidadNaturalezaJuridicaData.CAR_ID_FIELD]);

					SqlParameter[] parameters = {param1,param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16};

					if (transaccion.Length == 0)
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
					else
						SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
				}

			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA o PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA o PAS_ADICIONAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), ex);
			}
		}

		public void ActualizarEntidadNaturalezaJuridica(EntidadNaturalezaJuridicaData datos, params SqlTransaction[] transaccion)
		{
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[EntidadNaturalezaJuridicaData.ENT_ID_FIELD]);					
					SqlParameter param4 = new SqlParameter(ENT_PERSONERIA_JURIDICA_PARAM, row[EntidadNaturalezaJuridicaData.ENT_PERSONERIA_JURIDICA_FIELD]);
					SqlParameter param5 = new SqlParameter(ENT_OBJETO_SOCIAL_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OBJETO_SOCIAL_FIELD]);
					SqlParameter param6 = new SqlParameter(ENT_NATURALEZA_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NATURALEZA_FIELD]);
					SqlParameter param7 = new SqlParameter(ENT_ENTIDAD_CARACTER_PARAM, row[EntidadNaturalezaJuridicaData.ENT_ENTIDAD_CARACTER_FIELD]);
					SqlParameter param8 = new SqlParameter(ENT_SINO_ENTIDAD_PARAM, row[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD]);
					SqlParameter param9 = new SqlParameter(ENT_DEPENDE_PARAM, row[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD]);
					SqlParameter param10 = new SqlParameter(ENT_NIVEL_ENTIDAD_DEPENDE_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD]);
					SqlParameter param11 = new SqlParameter(ENT_OTRO_REGIMEN_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OTRO_REGIMEN_FIELD]);
					SqlParameter param12 = new SqlParameter(ENT_OTRO_SUBREGIMEN_PARAM, row[EntidadNaturalezaJuridicaData.ENT_OTRO_SUBREGIMEN_FIELD]);
					SqlParameter param13 = new SqlParameter(ENT_SINO_ENTIDAD_DEPENDE_RED_PARAM, row[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param14 = new SqlParameter(ENT_NOMBRE_ENTIDAD_DEPENDE_RED_PARAM, row[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param15 = new SqlParameter("@ENT_NIVEL_ENTIDAD_DEPENDE_RED", row[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD]);
					SqlParameter param16 = new SqlParameter("@CAR_ID", row[EntidadNaturalezaJuridicaData.CAR_ID_FIELD]);

					SqlParameter[] parameters = {param1, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16};

					if (transaccion.Length == 0)
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
					else
						SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA o PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA o PAS_ACTUALIZAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), ex);
			}
		}
			
		public void EliminarEntidadNaturalezaJuridica(decimal parENT_ID)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, parENT_ID);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), ex);
			}
		}

		public void EliminarEntidadNaturalezaJuridica(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), sqlEx);
			}
			catch (Exception ex)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PAS_ELIMINAR_ART_ENTIDAD_NATURALEZA_JURIDICA"), ex);
			}
			finally
			{
				objConnection.Close();
			}
		}
	}
}